#include "logger.hpp"
 
 
Level GLOB_LEAVEL = Level::INFO;
 
void SET_LOG_LEVEL(Level level){
    GLOB_LEAVEL = level;
 
}
 
 
void __log_info(Level level, const char* format, ...) {
    char msg[1000];
    va_list args;
    va_start(args, format);
    int n = 0;
 
    switch (level) {
        case Level::DEBUG: n += snprintf(msg + n, sizeof(msg) - n, DGREEN "[DEBUG]" CLEAR); break;
        case Level::VERB:  n += snprintf(msg + n, sizeof(msg) - n, PURPLE "[VERB]" CLEAR); break;
        case Level::INFO:  n += snprintf(msg + n, sizeof(msg) - n, YELLOW "[INFO]" CLEAR); break;
        case Level::WARN:  n += snprintf(msg + n, sizeof(msg) - n, BLUE "[WARN]" CLEAR); break;
        case Level::ERROR: n += snprintf(msg + n, sizeof(msg) - n, RED "[ERROR]" CLEAR); break;
        default:           n += snprintf(msg + n, sizeof(msg) - n, RED "[FATAL]" CLEAR); break;
    }
 
    n += vsnprintf(msg + n, sizeof(msg) - n, format, args);
 
    va_end(args);
 
    if (level <= GLOB_LEAVEL)
        fprintf(stdout, "%s\n", msg);
 
    if (level <= Level::ERROR) {
        fflush(stdout);
        exit(0);
    }
}
 
 